package cn.me.alphamq.broker.store;

import cn.me.alphamq.broker.model.tx.TxMsgModel;
import cn.me.alphamq.common.entity.req.PushTxMsgReq;
import io.netty.channel.ChannelHandlerContext;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 事务消息的的管理者
 *
 * @author f
 */
public class TxMsgManager {

    /**
     * 事务消息 id 与 模型 的映射，key：事务消息的 id，value：事务消息模型
     */
    private static final Map<String, TxMsgModel> TX_MSG_MODEL_MAP = new ConcurrentHashMap<>();

    /**
     * 保存事务消息
     *
     * @param pushTxMsgReq 发布事务消息的请求对象
     * @param ctx          发布事务消息通道的上下文
     */
    public static void put(PushTxMsgReq pushTxMsgReq, ChannelHandlerContext ctx) {
        TX_MSG_MODEL_MAP.put(pushTxMsgReq.getMsgId(), new TxMsgModel(pushTxMsgReq, ctx));
    }

    /**
     * 获取事务消息
     *
     * @param msgId 待获取的事务消息的 id
     * @return 待获取的事务消息
     */
    public static TxMsgModel get(String msgId) {
        return TX_MSG_MODEL_MAP.get(msgId);
    }

    /**
     * 移除事务消息
     *
     * @param msgId 待移除的事务消息的 id
     * @return 待移除的事务消息
     */
    public static TxMsgModel remove(String msgId) {
        return TX_MSG_MODEL_MAP.remove(msgId);
    }
}
